//menu 类
UM.ui.define('menu', {
    show: function ($obj, dir, fnname, topOffset, leftOffset) {

        fnname = fnname || 'position';
        if (this.trigger('beforeshow') === false) {
            return;
        } else {
            this.root().css($.extend({display: 'block'}, $obj ? {
                top: $obj[fnname]().top + (dir == 'right' ? 0 : $obj.outerHeight()) - (topOffset || 0),
                left: $obj[fnname]().left + (dir == 'right' ? $obj.outerWidth() : 0) - (leftOffset || 0)
            } : {}))
            this.trigger('aftershow');
        }
    },
    hide: function (all) {
        var $parentmenu;
        if (this.trigger('beforehide') === false) {
            return;
        } else {

            if ($parentmenu = this.root().data('parentmenu')) {
                if ($parentmenu.data('parentmenu') || all)
                    $parentmenu.edui().hide();
            }
            this.root().css('display', 'none');
            this.trigger('afterhide');
        }
    },
    attachTo: function ($obj) {
        var me = this;
        if (!$obj.data('$mergeObj')) {
            $obj.data('$mergeObj', me.root());
            $obj.on('wrapclick', function (evt) {
                me.show()
            });
            me.register('click', $obj, function (evt) {
                me.hide()
            });
            me.data('$mergeObj', $obj)
        }
    }
});